simoncpufandomcom-20200214-history
Research on Web Frameworks
Overview These notes have been sitting idly in our internal wiki for almost 2 years (?). Contents may be outdated. I'm pasting them here. DISCLAIMER: These are publicly available info. No company-specific info is ever pasted in my wiki. No violation of NDAs here. Frameworks * CodeIgniter ** Doesn't have built-in support for PUT and DELETE HTTP verbs. *** Can be patched, but may make things inconsistent. ** Not designed for REST ** Kick-ass framework ** Using POST for both creating, updating, and deleting breaks the semantics of the REST architecture ** Note: Kohana (formerly Blue Flame), a CodeIgniter fork, may or may not be better. * Tonic ** Designed as RESTful ** No separation of views from model and controller ** Objects cannot be used outside of original context. For example, Web objects can't easily be used for CLI. ** Claims to be usable without Smarty Template Engine *** How? Where is the code to back this up? How much work is needed in order to use this without Smarty? ** Too complicated, yet not powerful enough for our needs. ** It seems to lock us in into using template-based web application. * Meditation ** Crappy documentation *** Yet easily understandable ** BSD-licensed ** Lightweight; it satisfactorily handles GET, POST, PUT, and DELETE verbs ** Simple and elegant architecture ** The code is gone; the author may have abandoned the project :( ** Tried to contact him to no avail. Maybe he's already dead or something... hehe. ** Without community support, this framework will go stale. * Freja ** A JavaScript REST framework ** May not be applicable for Web Core * Zend Framework ** Bah... Still doesn't support PUT and DELETE HTTP verbs ** Lacks URL Router *** Then again, there's Zend_Controller_Router_Route() :) *** But not automatic like CodeIgniter * Agavi ** Mojavi fork. ** Can be used in a REST-based manner. Fully handles GET, POST, PUT, and DELETE verbs. ** Powerful Routing engine. *** Applies not only to URIs but also to HTTP headers as well. This gives us the power to set various options such as choosing the output format (XML, HTML, you name it...). Perfectly fits with REST. *** Their regex approach to URI routing has a side-effect of being able to pre-filter all input. Less worry about XSS and injection attacks. ** Console implementation for Agavi is about to be checked in. Very useful for our CLI implementation. ** Crappy documentation. The docs are filled with blank pages. But hey, it is still being flown under the radar until they get the docs in place. * Konstrukt ** Lightweight ** Unlike other frameworks, Konstrukt doesn't have libraries for rendering the UI page and other stuff. The focus is more on the Controller. This good, since our UI will be taken care of by OpenLaszlo anyway. ** Their Router's method to URL mapping isn't done automatically. Misc * Phing - a project build system based on Apache Ant. XML-based. * Propel - an Object Relational Mapping (ORM) framework for PHP5. Cool OOP API. Can easily be integrated into Agavi Framework. ** Too complicated and convoluted. The complexity is unjustified for a PHP Framework. * PHPUnit - a kick-ass testing framework for PHP. * fping - a ping-like program that checks hosts in a round-robin fashion. Very useful for health check.